from moviepy.editor import *
import numpy as np
import matplotlib.pyplot as plt
#from scipy import misc,ndimage
import cv2 as cv
from PIL import Image,ImageFilter,ImageEnhance
#ładowanie klipu
clip = VideoFileClip("clips/old_russia.mp4").subclip(0,15) #wycięcie klipu od 0 do 15 sekundy.
#ładowanie muzyki
music = AudioFileClip("music/jummpin_old.mp3")
clip = clip.set_audio(music.set_duration(clip.duration))
multipler = 3
mod_clip = clip.fl_time(lambda t: multipler*t).set_duration((clip.duration)/multipler) #t jest odpowiednikiem mijającego czasu.
mod_clip.ipython_display(width=500)
chunk: 25%|███████████████▉ | 28/111 [00:00<00:00, 226.69it/s, now=None]
Moviepy - Building video __temp__.mp4. MoviePy - Writing audio in __temp__TEMP_MPY_wvf_snd.mp3
t: 2%|█▍ | 3/150 [00:00<00:05, 28.59it/s, now=None]
MoviePy - Done. Moviepy - Writing video __temp__.mp4
Moviepy - Done ! Moviepy - video ready __temp__.mp4
#zapis do pliku
#mod_clip.write_videofile("output/3times_faster.mp4")
chunk: 2%|█▏ | 2/111 [00:00<00:05, 18.88it/s, now=None]
Moviepy - Building video output/3times_faster.mp4. MoviePy - Writing audio in 3times_fasterTEMP_MPY_wvf_snd.mp3
t: 1%|▉ | 2/150 [00:00<00:09, 16.01it/s, now=None]
MoviePy - Done. Moviepy - Writing video output/3times_faster.mp4
Moviepy - Done ! Moviepy - video ready output/3times_faster.mp4
clip.close()
mod_clip.close()
music.close()
x = np.linspace(0,10,100) #50 punktów od 0 do 4
y = 1 + np.sin(2*x) #funckja
print("Funkcja: 1 + sin(2*x)")
fig = plt.figure()
plt.plot(x,y, 'r')
plt.ylabel('T - timeline')
plt.xlabel('D - duration')
plt.title('Wykres funkcji ukazujący zachowanie czasu w filmie')
plt.show()
Funkcja: 1 + sin(2*x)
#ładowanie klipu
clip = VideoFileClip("clips/old_russia.mp4").subclip(5,25) #wycięcie klipu od 5 do 25 sekundy.
#ładowanie muzyki
music = AudioFileClip("music/jummpin_old.mp3")
clip = clip.set_audio(music.set_duration(clip.duration))
multipler = 2
mod_clip = clip.fl_time(lambda t: 1+np.sin(2*t)).set_duration((clip.duration)/multipler) #t jest odpowiednikiem mijającego czasu.
mod_clip.ipython_display(width=500)
chunk: 13%|███████▉ | 28/221 [00:00<00:00, 247.93it/s, now=None]
Moviepy - Building video __temp__.mp4. MoviePy - Writing audio in __temp__TEMP_MPY_wvf_snd.mp3
t: 1%|▉ | 4/300 [00:00<00:07, 38.95it/s, now=None]
MoviePy - Done. Moviepy - Writing video __temp__.mp4
Moviepy - Done ! Moviepy - video ready __temp__.mp4
#zapis do pliku
mod_clip.write_videofile("output/sinus_effect.mp4")
chunk: 0%| | 0/221 [00:00<?, ?it/s, now=None]
Moviepy - Building video output/sinus_effect.mp4. MoviePy - Writing audio in sinus_effectTEMP_MPY_wvf_snd.mp3
t: 0%| | 0/300 [00:00<?, ?it/s, now=None]
MoviePy - Done. Moviepy - Writing video output/sinus_effect.mp4
Moviepy - Done ! Moviepy - video ready output/sinus_effect.mp4
clip.close()
mod_clip.close()
music.close()
Jak widać klip zachowuje się jak funkcja sinus, przemieszcza się do przodu, po czym, po osiągnięciu amplitudy coraz szybciej się cofa do wartości ujemnych.
x = np.linspace(0,10,100) #50 punktów od 0 do 4
y = 1 + 2*np.sin((1/30)*np.exp(1)**x)+1 #funckja
print("Funkcja: 1 + 2*sin((1/30)*e^x) + 1")
fig = plt.figure()
plt.plot(x,y, 'r')
plt.ylabel('T - timeline')
plt.xlabel('D - duration')
plt.title('Wykres funkcji ukazujący zachowanie czasu w filmie')
plt.show()
Funkcja: 1 + 2*sin((1/30)*e^x) + 1
#ładowanie klipu
clip = VideoFileClip("clips/old_russia.mp4").subclip(15,25) #wycięcie klipu od 5 do 25 sekundy.
#ładowanie muzyki
music = AudioFileClip("music/jummpin_old.mp3")
clip = clip.set_audio(music.set_duration(clip.duration))
mod_clip = clip.fl_time(lambda t: 1 + 2*np.sin((1/30)*np.exp(1)**t)+1).set_duration(10) #t jest odpowiednikiem mijającego czasu.
mod_clip.ipython_display(width=500)
chunk: 13%|███████▉ | 28/221 [00:00<00:00, 231.73it/s, now=None]
Moviepy - Building video __temp__.mp4. MoviePy - Writing audio in __temp__TEMP_MPY_wvf_snd.mp3
t: 2%|█▍ | 6/300 [00:00<00:04, 59.44it/s, now=None]
MoviePy - Done. Moviepy - Writing video __temp__.mp4
Moviepy - Done ! Moviepy - video ready __temp__.mp4
#zapis do pliku
#mod_clip.write_videofile("output/complicated_func_effect.mp4")
chunk: 0%| | 0/221 [00:00<?, ?it/s, now=None]
Moviepy - Building video output/complicated_func_effect.mp4. MoviePy - Writing audio in complicated_func_effectTEMP_MPY_wvf_snd.mp3
t: 0%| | 0/300 [00:00<?, ?it/s, now=None]
MoviePy - Done. Moviepy - Writing video output/complicated_func_effect.mp4
Moviepy - Done ! Moviepy - video ready output/complicated_func_effect.mp4
clip.close()
mod_clip.close()
music.close()
Jak widać, można uzyskać ciekawe efekty przy pomocy takich możliwościach biblioteki.
#ładowanie klipu
clip = VideoFileClip("clips/tree1.avi")
def invert_red_to_blue(image):
return image[:,:,[2,1,2]]
mod_clip = clip.fl_image(invert_red_to_blue)
mod_clip.ipython_display(width=500)
chunk: 17%|██████████▋ | 28/166 [00:00<00:00, 264.30it/s, now=None]
Moviepy - Building video __temp__.mp4. MoviePy - Writing audio in __temp__TEMP_MPY_wvf_snd.mp3
t: 3%|█▊ | 6/225 [00:00<00:03, 58.80it/s, now=None]
MoviePy - Done. Moviepy - Writing video __temp__.mp4
Moviepy - Done ! Moviepy - video ready __temp__.mp4
#zapis do pliku
#mod_clip.write_videofile("output/red2blue.mp4")
chunk: 5%|███▌ | 9/166 [00:00<00:01, 89.16it/s, now=None]
Moviepy - Building video output/red2blue.mp4. MoviePy - Writing audio in red2blueTEMP_MPY_wvf_snd.mp3
t: 2%|█▏ | 4/225 [00:00<00:05, 37.40it/s, now=None]
MoviePy - Done. Moviepy - Writing video output/red2blue.mp4
Moviepy - Done ! Moviepy - video ready output/red2blue.mp4
clip.close()
mod_clip.close()
music.close()
Film jest wyraźniej intesywniejszy w barwach zielonych.
#ładowanie klipu
clip = VideoFileClip("clips/tree1.avi")
def effect(image):
new_image = image.copy()
gaussblur = cv.GaussianBlur(new_image,(5,5),0)
return gaussblur
mod_clip = clip.fl_image(effect)
mod_clip.ipython_display(width=500)
chunk: 17%|██████████▋ | 28/166 [00:00<00:00, 229.06it/s, now=None]
Moviepy - Building video __temp__.mp4. MoviePy - Writing audio in __temp__TEMP_MPY_wvf_snd.mp3
t: 4%|██▊ | 9/225 [00:00<00:02, 89.08it/s, now=None]
MoviePy - Done. Moviepy - Writing video __temp__.mp4
Moviepy - Done ! Moviepy - video ready __temp__.mp4
#zapis do pliku
mod_clip.write_videofile("output/gaussBlur.mp4")
chunk: 14%|████████▋ | 23/166 [00:00<00:00, 227.85it/s, now=None]
Moviepy - Building video output/gaussBlur.mp4. MoviePy - Writing audio in gaussBlurTEMP_MPY_wvf_snd.mp3
t: 2%|█▏ | 4/225 [00:00<00:05, 39.24it/s, now=None]
MoviePy - Done. Moviepy - Writing video output/gaussBlur.mp4
Moviepy - Done ! Moviepy - video ready output/gaussBlur.mp4
clip.close()
mod_clip.close()
Jak widać można przechwytywać pojedyńczą klatkę filmu i dokonywać zmian na jej macierzy. Przydatne przy analizie danych.
#ładowanie klipu
clip = VideoFileClip("clips/mario.mp4")
def effect(image):
new_image = image.copy()
reflect = cv2.copyMakeBorder(new_image,40,40,40,40,cv2.BORDER_REFLECT)
return reflect
mod_clip = clip.fl_image(effect)
mod_clip.ipython_display(width=500)
chunk: 7%|████▋ | 28/375 [00:00<00:01, 272.00it/s, now=None]
Moviepy - Building video __temp__.mp4. MoviePy - Writing audio in __temp__TEMP_MPY_wvf_snd.mp3
t: 3%|██ | 16/510 [00:00<00:03, 158.51it/s, now=None]
MoviePy - Done. Moviepy - Writing video __temp__.mp4
Moviepy - Done ! Moviepy - video ready __temp__.mp4
#zapis do pliku
#mod_clip.write_videofile("output/mario-with-frame.mp4")
chunk: 1%|▎ | 2/375 [00:00<00:20, 17.96it/s, now=None]
Moviepy - Building video output/mario-with-frame.mp4. MoviePy - Writing audio in mario-with-frameTEMP_MPY_wvf_snd.mp3
t: 1%|▍ | 3/510 [00:00<00:20, 25.24it/s, now=None]
MoviePy - Done. Moviepy - Writing video output/mario-with-frame.mp4
Moviepy - Done ! Moviepy - video ready output/mario-with-frame.mp4
clip.close()
mod_clip.close()